package com.chenjun.designpattern.creational.factory;

/**
 * 精髓一句话总结 ，工厂方法模式是定义一个创建对象的接口，这个"接口"可以是abstract或者interface，
 * 然后让子工厂来具体实现到底生成哪种类型
 * 实际案例：
 *Mybatis3.2.8 源码的SqlSessionFactory生成SQLSession 就是一个工厂方法的典型案例
 * @author admin
 *
 */
public class 工厂方法模式
{
	public static void main(String[] args)
	{
		DogFactory dogFactory = new DogFactory();
		Animal  dog1 = dogFactory.getAnimal();
		
		CatFactory catFactory = new CatFactory();
		Animal  cat1 = catFactory.getAnimal();
	}
}

abstract class AnimalFactory
{
	public abstract Animal getAnimal();
}

class DogFactory extends AnimalFactory
{
	@Override
	public Animal getAnimal()
	{
		System.out.println("创建狗");
		return new Dog();
	}
}

class CatFactory extends AnimalFactory
{
	@Override
	public Animal getAnimal()
	{
		System.out.println("创建猫");
		return new Cat();
	}
}

class Animal
{
	
}

class Dog extends Animal
{
	public Dog()
	{
		System.out.println("狗创建成功");
	}
}

class Cat extends Animal
{
	public Cat()
	{
		System.out.println("猫创建成功");
	}
}
